package main

import (
	"fmt"
	"reflect"
)

// 结构体内存地址
func S6() {
	// 创建一个结构体时， 结构体是一个内存地址且与第一个元素相同， 里面的类型是不同的内存地址
	type S1 struct {
		name string
		age  int8
	}

	v1 := S1{name: "myc", age: 18}
	fmt.Printf("v1: %+v, mem:%p\n", v1, &v1)
	fmt.Printf("v1.name: %p, v1.age: %p \n", &v1.name, &v1.age)

}

// 结构体指针
func S7() {
	type S1 struct {
		name string
		age  int8
	}

	fmt.Printf("S1:%p\n", &S1{})

	// 创建一个结构体指针
	var P1 *S1
	P1 = &S1{name: "myc", age: 18}
	fmt.Printf("P1: %+v, mem:%p, %+v\n", P1, P1, reflect.TypeOf(P1))

	//另一种创建指针结构体的方法
	var P2 *S1 = new(S1)
	P2.name = "djr"
	P2.age = 18
	fmt.Printf("P2: %+v, mem:%p, %+v\n", P2, P2, reflect.TypeOf(P2))
}
